package view;



import java.awt.BorderLayout;

import javax.persistence.EntityManager;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JOptionPane;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.LineBorder;
import javax.swing.text.MaskFormatter;
import javax.swing.text.NumberFormatter;

import java.awt.Color;

import javax.swing.JTextField;
import javax.swing.JFormattedTextField;
import javax.swing.JRadioButton;
import javax.swing.JComboBox;

import connection.EMFLocal;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.ButtonGroup;

import model.Cliente;
import model.Estado;
import model.Pais;
import negocios.RnCliente;
import negocios.RnEstado;
import negocios.RnPais;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JTextArea;

public class JClienteAdicionar extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private final JPanel contentPanel = new JPanel();
	private JTextField txtRazao;
	private JTextField txtNome;
	private JTextField txtEndereco;
	private JTextField txtBairro;
	private JTextField txtCidade;
	private JTextField txtRamal;
	private JTextField txtEstadual;
	private JTextField txtEmail;
	private JTextField txtSite;
	private final ButtonGroup buttonGroup = new ButtonGroup();
	private final ButtonGroup buttonGroup_1 = new ButtonGroup();
	private JRadioButton txtFisica;
	private JRadioButton txtJuridica;
	private JRadioButton txtAtivo;
	private JRadioButton txtDesativado;
	private JFormattedTextField txtDataCadastro;
	private JFormattedTextField txtCep;
	private JFormattedTextField txtTelefone;
	private JFormattedTextField txtCelular;
	private JFormattedTextField txtFax;
	private JFormattedTextField txtDataNascimento;
	private JFormattedTextField txtNumero;
	private JFormattedTextField txtFederal;
	private JComboBox txtEstado;
	private JComboBox txtPais;
	private JTextArea txtComplemento;
	private JTextArea txtObservacao;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			JClienteAdicionar dialog = new JClienteAdicionar(null, true);
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 * @throws ParseException 
	 */
	public JClienteAdicionar(JDialog pai, boolean modal) throws ParseException {
		super(pai, modal);
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		setTitle("Cadastro de Clientes");
		setBounds(100, 100, 659, 720);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		JPanel panel = new JPanel();
		panel.setName("");
		panel.setToolTipText("");
		panel.setBorder(new LineBorder(Color.GRAY));
		
		
		//botao salva
		
		
		JButton btnSalvar = new JButton("Salvar");
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				try {
					
					
					
					EntityManager em = EMFLocal.getEntityManager();
					
					//pegar campos do formulario
					
					String pessoa = "";
					
					if(txtFisica.isSelected()){
						pessoa = "Fisica";
						
					}
					if(txtJuridica.isSelected()){
						pessoa = "Juridica";
					}
					
					//data atual
					
					Date data = Calendar.getInstance().getTime();
					DateFormat formato = DateFormat.getDateInstance();
					String dataAtual = formato.format(data);
					txtDataCadastro.setText(dataAtual);
					
					// String normais
					
					String razao = txtRazao.getText();
					String nome = txtNome.getText();
					String endereco = txtEndereco.getText();
					String numero = txtNumero.getText();
					String bairro = txtBairro.getText();
					String complemento = txtComplemento.getText();
					String cidade = txtCidade.getText();
					String cep = txtCep.getText();
					
					//combo estado
					RnEstado rnEstado = new RnEstado();
					Estado idEstado = rnEstado.ObterEstadoPeloID(txtEstado.getSelectedIndex());
					
					//combo pais
					RnPais rnPais = new RnPais();
					Pais idPais = rnPais.ObterPaisPeloID(txtPais.getSelectedIndex());
					
					//data nascimento
					Date dataNasc = formato.parse(txtDataNascimento.getText());
					
					//documentos
					String federal = txtFederal.getText();
					
					String estadual = txtEstadual.getText();
					
					
					String telefone = txtTelefone.getText();
					String celular = txtCelular.getText();
					String fax = txtFax.getText();
					String ramal = txtRamal.getText();
					String email = txtEmail.getText();
					String site = txtSite.getText();
					String observacao = txtObservacao.getText();
					
					//situacao
					
					String situacao;
					if(txtAtivo.isSelected()){
						situacao = "Ativo";
					}
					else{
						situacao = "Desativado";
					}
					
					//persistencia
					
					Cliente cliente = new Cliente();
					RnCliente rnCliente = new RnCliente();
					
					
					cliente.setTipoPessoa(pessoa);
					cliente.setDataCadastro(data);
					cliente.setRazao(razao);
					cliente.setNome(nome);
					cliente.setEndereco(endereco);
					cliente.setNumero(Integer.parseInt(numero));
					cliente.setBairro(bairro);
					cliente.setComplemento(complemento);
					//cliente.setCidade();
					cliente.setEstado(idEstado);
					cliente.setPai(idPais);
					cliente.setDataNascFab(dataNasc);
					cliente.setCep(cep);
					cliente.setRegFederal(federal);
					cliente.setRegEstadual(estadual);
					cliente.setTelefone(telefone);
					cliente.setCelular(celular);
					cliente.setFax(fax);
					cliente.setRamal(Integer.parseInt(ramal));
					cliente.setEmail(email);
					cliente.setSite(site);
					cliente.setObservacao(observacao);
					cliente.setSituacao(situacao);
					
					em.getTransaction().begin();
					rnCliente.inserir(cliente);
					em.getTransaction().commit();
					EMFLocal.limparEntityManager();
					JOptionPane.showMessageDialog(null, "Cliente Cadastrado");
					
					
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Erro ao Cadastrar");
				}
				
			}
		});
		
		JButton btnCancelar = new JButton("Cancelar");
		GroupLayout gl_contentPanel = new GroupLayout(contentPanel);
		gl_contentPanel.setHorizontalGroup(
			gl_contentPanel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPanel.createSequentialGroup()
					.addContainerGap()
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPanel.createSequentialGroup()
							.addComponent(panel, GroupLayout.PREFERRED_SIZE, 616, Short.MAX_VALUE)
							.addContainerGap())
						.addGroup(Alignment.TRAILING, gl_contentPanel.createSequentialGroup()
							.addComponent(btnSalvar, GroupLayout.PREFERRED_SIZE, 103, GroupLayout.PREFERRED_SIZE)
							.addGap(18)
							.addComponent(btnCancelar)
							.addGap(18))))
		);
		gl_contentPanel.setVerticalGroup(
			gl_contentPanel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPanel.createSequentialGroup()
					.addComponent(panel, GroupLayout.PREFERRED_SIZE, 632, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
						.addComponent(btnSalvar)
						.addComponent(btnCancelar))
					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
		);
		
		JLabel lblData = new JLabel("Data:");
		lblData.setBounds(443, 17, 39, 15);
		
		JFormattedTextField txtDataCadastro = new JFormattedTextField();
		txtDataCadastro.setBounds(494, 15, 110, 19);
		
		JLabel lblNome = new JLabel("Razao Social:");
		lblNome.setBounds(13, 48, 95, 15);
		
		JLabel lblPessoa = new JLabel("Pessoa:");
		lblPessoa.setBounds(13, 17, 57, 15);
		
		JRadioButton txtFisica = new JRadioButton("Física");
		txtFisica.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				txtRazao.setEnabled(false);
				
			}
		});
		buttonGroup.add(txtFisica);
		txtFisica.setBounds(102, 13, 65, 23);
		
		JRadioButton txtJuridica = new JRadioButton("Juridíca");
		txtJuridica.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				txtRazao.setEnabled(true);
			}
		});
		txtJuridica.setSelected(true);
		buttonGroup.add(txtJuridica);
		txtJuridica.setBounds(189, 13, 77, 23);
		
		txtRazao = new JTextField();
		txtRazao.setBounds(126, 46, 478, 19);
		txtRazao.setColumns(10);
		
		JLabel lblNome_1 = new JLabel("Nome:");
		lblNome_1.setBounds(13, 85, 45, 15);
		
		txtNome = new JTextField();
		txtNome.setBounds(76, 83, 528, 19);
		txtNome.setColumns(10);
		
		JLabel lblEndereo = new JLabel("Endereço:");
		lblEndereo.setBounds(13, 122, 71, 15);
		
		txtEndereco = new JTextField();
		txtEndereco.setBounds(102, 120, 502, 19);
		txtEndereco.setColumns(10);
		
		JLabel lblNumero = new JLabel("Numero:");
		lblNumero.setBounds(13, 159, 60, 15);
		
		JLabel lblBairro = new JLabel("Bairro:");
		lblBairro.setBounds(260, 159, 48, 15);
		
		txtBairro = new JTextField();
		txtBairro.setBounds(326, 157, 278, 19);
		txtBairro.setColumns(10);
		
		JLabel lblCidade = new JLabel("Cidade:");
		lblCidade.setBounds(13, 280, 54, 15);
		
		txtCidade = new JTextField();
		txtCidade.setEnabled(false);
		txtCidade.setBounds(85, 278, 269, 19);
		txtCidade.setColumns(10);
		
		JLabel lblEstado = new JLabel("Estado:");
		lblEstado.setBounds(13, 320, 54, 15);
		
		JComboBox txtEstado = new JComboBox();
		txtEstado.setBounds(85, 315, 192, 24);
		
		JLabel lblPais = new JLabel("Pais:");
		lblPais.setBounds(353, 320, 35, 15);
		
		JComboBox txtPais = new JComboBox();
		txtPais.setBounds(400, 315, 154, 24);
		
		JLabel lblDataDeNascimento = new JLabel("Data de Nascimento:");
		lblDataDeNascimento.setBounds(13, 365, 148, 15);
		
		MaskFormatter formatoData = new MaskFormatter("##/##/####");
		JFormattedTextField txtDataNasc = new JFormattedTextField(formatoData);
		txtDataNasc.setBounds(179, 363, 123, 19);
		
		
		JLabel lblTelefone = new JLabel("Telefone:");
		lblTelefone.setBounds(373, 402, 67, 15);
		
		JButton button = new JButton("+");
		button.setBounds(283, 315, 44, 25);
		
		JButton button_1 = new JButton("+");
		button_1.setBounds(560, 315, 44, 25);
		
		MaskFormatter formatoTelefone = new MaskFormatter("(##)####-####");
		JFormattedTextField txtTelefone = new JFormattedTextField(formatoTelefone);
		txtTelefone.setBounds(463, 400, 141, 19);
		
		JLabel lblComplemento = new JLabel("Complemento:");
		lblComplemento.setBounds(13, 194, 102, 15);
		
		JLabel lblCelular = new JLabel("Celular:");
		lblCelular.setBounds(13, 439, 55, 15);
		
		MaskFormatter formatoCelular = new MaskFormatter("(##)#########");
		JFormattedTextField txtCelular = new JFormattedTextField(formatoCelular);
		txtCelular.setBounds(86, 437, 133, 19);
		
		JLabel lblFax = new JLabel("Fax:");
		lblFax.setBounds(260, 439, 29, 15);
		
		MaskFormatter formatoFax = new MaskFormatter("(##)####-####");
		JFormattedTextField txtFax = new JFormattedTextField(formatoFax);
		txtFax.setBounds(307, 437, 123, 19);
		
		JLabel lblCep = new JLabel("CEP:");
		lblCep.setBounds(433, 280, 31, 15);
		
		MaskFormatter formatoCep = new MaskFormatter("#####-###");
		JFormattedTextField txtCep = new JFormattedTextField(formatoCep);
		txtCep.setBounds(479, 278, 125, 19);
		
		JLabel lblRamal = new JLabel("Ramal:");
		lblRamal.setBounds(463, 439, 48, 15);
		
		txtRamal = new JTextField();
		txtRamal.setBounds(536, 437, 68, 19);
		txtRamal.setColumns(10);
		
		JLabel lblCpfcnpj = new JLabel("CPF/CNPJ:");
		lblCpfcnpj.setBounds(340, 365, 67, 15);
		
		// troca de mascara
		
		MaskFormatter maskFederal = new MaskFormatter();
		
		
		if(txtFisica.isSelected()){
			maskFederal.setMask("###.###.###-##");
		}else{
			maskFederal.setMask("##.###.###/####-##");
		}
			
			
		JFormattedTextField txtFederal = new JFormattedTextField(maskFederal);
		txtFederal.setBounds(425, 363, 179, 19);
		
		JLabel lblRgie = new JLabel("RG/IE:");
		lblRgie.setBounds(13, 400, 40, 15);
		
		txtEstadual = new JTextField();
		txtEstadual.setBounds(71, 398, 156, 19);
		txtEstadual.setColumns(10);
		
		JLabel lblEmail = new JLabel("E-mail:");
		lblEmail.setBounds(13, 476, 47, 15);
		
		txtEmail = new JTextField();
		txtEmail.setBounds(78, 474, 526, 19);
		txtEmail.setColumns(10);
		
		JLabel lblSite = new JLabel("Site:");
		lblSite.setBounds(13, 513, 33, 15);
		
		txtSite = new JTextField();
		txtSite.setBounds(64, 511, 540, 19);
		txtSite.setColumns(10);
		
		JLabel lblObservao = new JLabel("Observação:");
		lblObservao.setBounds(13, 548, 89, 15);
		
		JLabel lblSituao = new JLabel("Situação:");
		lblSituao.setBounds(480, 548, 67, 15);
		
		JRadioButton txtAtivo = new JRadioButton("Ativo");
		buttonGroup_1.add(txtAtivo);
		txtAtivo.setBounds(480, 569, 60, 23);
		
		JRadioButton txtDesativado = new JRadioButton("Desativado");
		buttonGroup_1.add(txtDesativado);
		txtDesativado.setBounds(480, 596, 105, 23);
		panel.setLayout(null);
		panel.add(lblPessoa);
		panel.add(txtFisica);
		panel.add(txtJuridica);
		panel.add(lblData);
		panel.add(txtDataCadastro);
		panel.add(lblNome);
		panel.add(txtRazao);
		panel.add(lblNome_1);
		panel.add(txtNome);
		panel.add(lblEndereo);
		panel.add(txtEndereco);
		panel.add(lblNumero);
		panel.add(lblBairro);
		panel.add(txtBairro);
		panel.add(lblComplemento);
		panel.add(lblCidade);
		panel.add(txtCidade);
		panel.add(lblCep);
		panel.add(txtCep);
		panel.add(lblEstado);
		panel.add(txtEstado);
		panel.add(button);
		panel.add(lblPais);
		panel.add(txtPais);
		panel.add(button_1);
		panel.add(lblDataDeNascimento);
		panel.add(txtDataNasc);
		panel.add(lblCpfcnpj);
		panel.add(txtFederal);
		panel.add(lblRgie);
		panel.add(txtEstadual);
		panel.add(lblTelefone);
		panel.add(lblCelular);
		panel.add(txtCelular);
		panel.add(lblFax);
		panel.add(txtFax);
		panel.add(lblRamal);
		panel.add(txtRamal);
		panel.add(txtTelefone);
		panel.add(lblEmail);
		panel.add(txtEmail);
		panel.add(lblSite);
		panel.add(txtSite);
		panel.add(lblObservao);
		panel.add(lblSituao);
		panel.add(txtAtivo);
		panel.add(txtDesativado);
		
		//Deixa Somente Numeros no field
		
		NumberFormat formato = NumberFormat.getInstance();
		NumberFormatter formatado = new NumberFormatter(formato);
		formatado.setValueClass(Integer.class);
		formatado.setMinimum(0);
		formatado.setMaximum(Integer.MAX_VALUE);
		formatado.setCommitsOnValidEdit(true);
		
		JFormattedTextField txtNumero = new JFormattedTextField(formatado);
		txtNumero.setBounds(85, 157, 117, 19);
		
		
		panel.add(txtNumero);
		
		JTextArea txtComplemento = new JTextArea();
		txtComplemento.setBounds(13, 216, 591, 50);
		panel.add(txtComplemento);
		
		JTextArea txtObservacao = new JTextArea();
		txtObservacao.setBounds(13, 569, 447, 51);
		panel.add(txtObservacao);
		
		JButton button_2 = new JButton("+");
		button_2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				try {
					exibirJanelaCadastroCidades();
				} catch (ParseException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				
			}
		});
		button_2.setBounds(366, 275, 45, 25);
		panel.add(button_2);
		contentPanel.setLayout(gl_contentPanel);
		
		
	}
	
	public void exibirJanelaCadastroCidades() throws ParseException{
		JCidade jcidade = new JCidade(this, true);
		jcidade.setLocationRelativeTo(null);
		jcidade.setModal(true);
		jcidade.setVisible(true);
		jcidade.setResizable(false);
	}
}
